package com.zenithmind.mall.service;

/**
 * 订单状态服务接口 - 遵循接口隔离原则，专门负责订单状态变更操作
 * 
 * @author ZenithMind Team
 * @since 2025-07-03
 */
public interface OrderStatusService {

    /**
     * 支付订单
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 支付结果
     */
    Boolean payOrder(String orderId, String userId);

    /**
     * 取消订单
     * 
     * @param orderId 订单ID
     * @param reason 取消原因
     * @param userId 用户ID
     * @return 操作结果
     */
    Boolean cancelOrder(String orderId, String reason, String userId);

    /**
     * 发货
     * 
     * @param orderId 订单ID
     * @param shippingCompany 物流公司
     * @param shippingNo 物流单号
     * @return 操作结果
     */
    Boolean shipOrder(String orderId, String shippingCompany, String shippingNo);

    /**
     * 确认收货
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 操作结果
     */
    Boolean confirmReceive(String orderId, String userId);

    /**
     * 完成订单
     * 
     * @param orderId 订单ID
     * @return 操作结果
     */
    Boolean finishOrder(String orderId);

    /**
     * 检查订单是否可以取消
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 是否可以取消
     */
    Boolean canCancelOrder(String orderId, String userId);

    /**
     * 检查订单是否可以支付
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 是否可以支付
     */
    Boolean canPayOrder(String orderId, String userId);

    /**
     * 检查订单是否可以发货
     * 
     * @param orderId 订单ID
     * @return 是否可以发货
     */
    Boolean canShipOrder(String orderId);

    /**
     * 检查订单是否可以确认收货
     * 
     * @param orderId 订单ID
     * @param userId 用户ID
     * @return 是否可以确认收货
     */
    Boolean canConfirmReceive(String orderId, String userId);
}
